/**
 * @author alex
 */

package commonUtility;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
import javax.bluetooth.L2CAPConnection;
import javax.microedition.io.Connector;

import com.intel.bluetooth.BlueCoveImpl;

/**
 * Classe thread che invia a tutti i dispositivi rilevati dal master nell'inquiry il valore di RSSI per loro
 * rilevato, ed il nome del file locale rappresentante il gateway (il punto di interesse) utile al client ai fini
 * della localizzazione sulla mappa
 * @author erond
 *
 */
public class SendRssiThread extends Thread {

	private String file ="file2";	
	private int btDeviceId;

	/**
	 * @param nomeFile nome del file locale al gateway, utile al client ai fini della localizzazione sulla mappa
	 * @param btDeviceId dispositivo Bluetooth hci da utilizzare
	 */
	public SendRssiThread(String nomeFile, int btDeviceId){
		this.file=nomeFile;
		this.btDeviceId=btDeviceId;
	}

	public void run(){

		System.out.println("Avvio sendRssiThread con fileName = "+file+" e hciDev = "+btDeviceId);
		try {
			BlueCoveImpl.useThreadLocalBluetoothStack();
			BlueCoveImpl.setConfigProperty("bluecove.deviceID", ""+btDeviceId);
		} catch (Exception e) {
			e.printStackTrace();
			return;
		}
		StringTokenizer st = null;
		String delim = ":";
		boolean moreLines = true;	
		BufferedReader in = null;
		try {
			in = new BufferedReader(new FileReader("./gatewayTmp/inquiryTmp.txt"));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		while (moreLines) {
			//estrazione della linea
			String linea = LineUtility.getNextLine(in);
			if (linea.equals("Nessuna linea disponibile")) { 
				moreLines = false;
				break; //esco dal ciclo
			}	
			st = new StringTokenizer(linea);
			while(st.hasMoreTokens()){
				try{
					String btAddress = st.nextToken(delim);	
					int rssi = Integer.parseInt(st.nextToken(delim));			
					String url = "btl2cap://"+btAddress+":"+ 4097;
					L2CAPConnection con = null;
					try {
						con = (L2CAPConnection) Connector.open(url);
					} catch (IOException e) {
						System.err.println("ATTENZIONE: Eccezione nella open con "+btAddress);
						continue;
					}

					String infoRssi = "RSSI,"+rssi+","+file;
					String tmp = null;
					byte[] arrayTmp = new byte[80];
					int byteLetti;

					try {
						con.send(infoRssi.getBytes());
						System.err.println("Sent \""+infoRssi+"\" to "+btAddress);
						byteLetti=con.receive(arrayTmp);
						tmp=new String(arrayTmp,0,byteLetti);
						System.err.println("Received "+tmp+" from "+btAddress+". -> con.close() trying... ");
						con.close();	
						//System.err.println("con.close() for "+btDeviceId+"completed!");
					} catch (IOException e) {
						e.printStackTrace();
					}	

				}catch(NoSuchElementException e) {
					e.printStackTrace();
					continue;
				}
			}//Fine 	   

		}//fine while(moreLines)  

		try {
			//System.out.println("SendRssiThread per il MAC "+btDeviceId+" terminato. Faccio la BlueCoveImpl.shutdownThreadBluetoothStack()");
			BlueCoveImpl.shutdownThreadBluetoothStack();
			//System.out.println("BlueCoveImpl.shutdownThreadBluetoothStack() TERMINATA");
		} catch (Exception e) {
			e.printStackTrace();
			return;
		}
	}	

}